A complex application such as a server-side enterprise application may have to support a variety of different clients including desktop browsers, mobile browsers and native mobile applications. The application might also expose application programming interfaces for third parties to consume. It might also integrate with other applications, for example, via either web services or message brokers. As such, the application may have to consist of different types of components corresponding to different functional areas of the application. For example, logical components of the application may include presentation components, business logic components, database access logic, application integration logic, etc. Another requirement may be that different teams may be working on the application. Further, continuous deployment of the different components of the application may be desired. Multiple copies of the application may need to be run on multiple machines to satisfy scalability and availability requirements. Different technologies such as frameworks, programming languages, etc., may be more suitable for different components of the application.
An example of software architecture design pattern for such complex applications is a design pattern based on micro-service architecture. According to the micro-service architecture, complex applications are composed of small, independent processes communicating with each other using language-agnostic application programming interfaces. These services have limited scope, focused on performing a small task and are highly decoupled from one another.